/**
 新版领导驾驶舱
 **/
import { http } from "@/utils/http";

// 响应接口
export interface QueryTaskStatusRes {
  /* */
  taskModuleName: string;

  /* */
  totalTasks: number;

  /* */
  undoTasks: number;

  /* */
  doneTasks: number;
}

/**
 * 四科各个模块的任务状态查询列表
 * @param {object} data QueryTaskStatusDTO
 * @param {string} data.factoryId
 * @param {string} data.facCode
 * @param {array} data.hseAreaCode
 * @param {string} data.clazzCode 科室编码
 * @param {array} data.taskModuleTypeCode 任务类型编码Code
 * @param {array} data.taskStatus 任务状态
 * @param {string} data.taskTitle 任务标题
 * @param {array} data.taskOwner 任务执行人
 * @param {object} data.startTime 查询开始时间
 * @param {object} data.endTime 查询结束时间
 * @returns
 */
export function queryTaskStatus(data): Promise<QueryTaskStatusRes[]> {
  return http.post(`/account/api/v1/publish/taskboard/queryTaskStatus`, { data });
}
// 响应接口
export interface ListMainInRes {
  /*主进名称 */
  mainName: string;

  /*主进名称 */
  mainKey: string;

  /*电流 */
  current: number;

  /*电流单位 */
  currentUnit: string;

  /*电压 */
  voltage: number;

  /*电压单位 */
  voltageUnit: string;

  /*电压specMin */
  voltageSpecMin: number;

  /*电压specMax */
  voltageSpecMax: number;

  /*电流spcMin */
  currentSpecMin: number;

  /*电流spcMax */
  currentSpecMax: number;

  /*频率 */
  frequency: number;

  /*频率单位 */
  frequencyUnit: string;

  /*状态 */
  status: string;

  /*状态名称 */
  statusName: string;

  /*温度 */
  temperature: number;

  /*温度名称 */
  temperatureName: string;

  /*功率 */
  power: number;

  /*功率单位 */
  powerUnit: string;
}

/**
 * 主进状态
 * @returns
 */
export function listMainIn(): Promise<ListMainInRes[]> {
  return http.post(`/operation/api/v1/ele/main/in`);
}
export interface ListValueRangeRes {
  /*字典key */
  dictKey: string;

  /*字典name */
  dictName: string;

  /*取值下限 */
  minValue: Record<string, unknown>;

  /*取值上限 */
  maxValue: Record<string, unknown>;
}

/**
 * 获取字典中配置的数值显示上下限
 * @param {array} params string
 * @returns
 */
export function listValueRange(data: any[]): Promise<ListValueRangeRes> {
  return http.post(`/operation/api/v1/machine/listValueRange`, { data });
}
// 参数接口
export interface QueryChartForHourParams {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /*字典类型 */
  dictTypeCode?: string;

  /*字典表Key */
  dictKey: string;

  /*查询时间 */
  queryDate?: Record<string, unknown>;
}

// 响应接口
export interface QueryChartForHourRes {
  /*详情面板 */
  panelList: {
    /*标题 */
    title: string;

    /*内控要求 */
    requirements: string;

    /*最大值 */
    max: string;

    /*最小值 */
    min: string;

    /*单位 */
    unit: string;

    /*指标详情 */
    details: {
      /*数值 */
      value: number;

      /* */
      xaxis: string;
    }[];

    /*最大值数据 */
    maxValue: string;

    /*最小值数据 */
    minValue: string;

    /*oos计数 */
    oos: number;

    /*ooc计数 */
    ooc: number;

    /*oow计数 */
    oow: number;

    /*spc名称 */
    spcJob: string;

    /*数据字典key */
    dictKey: string;
  }[];

  /* */
  xaxis: string[];
}

/**
 * 小时图
 * @param {object} params QueryChartDTO
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {string} params.dictTypeCode 字典类型
 * @param {string} params.dictKey 字典表Key
 * @param {object} params.queryDate 查询时间
 * @returns
 */
export function queryChartForHour(data: QueryChartForHourParams): Promise<QueryChartForHourRes> {
  return http.post(`/operation/api/v1/water/dashboard/queryChartForHour`, { data });
}
// 参数接口
export interface QuerySpcAnalysisParams {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /*作业编号 */
  jobIdList?: Record<string, unknown>[];

  /*点位 */
  pointList?: string[];

  /*时间周期(minutes/hour/day/week/months) */
  timePeriod: string;

  /*统计函数：AVG/MAX/MIN/COUNT/FIRST/LAST/SUM */
  statFunction?: string;

  /*开始日期 */
  startTime: string;

  /*结束日期 */
  endTime: string;

  /*是否统计曲线上的最新批注 */
  requireAlarmNote?: boolean;

  /*需要标记spc报警ID（spcAnalysisResultId) */
  spcAnalysisResultId?: number;

  /*忽略查询时间范围限制 */
  ignoreTimeValidate?: boolean;

  /*放大数据的倍率（例如：100 放大100倍，-100 缩小100倍）默认为0不处理倍率 */
  radio?: number;

  /*自定义数值精度（例如：0不处理精度，大于0 处理保留小数位）默认为0不处理精度 */
  scale?: number;
}

// 响应接口
export interface QuerySpcAnalysisRes {
  /*指标id */
  id: number;

  /*spc编码（可使用数组字典的字典项编码，与spcJob做映射使用） */
  spcCode: string;

  /*作业id */
  jobId: string;

  /*科室编码 */
  classCode: string;

  /*科室名称 */
  className: string;

  /*子系统编码 */
  systemCode: string;

  /*子系统名称 */
  systemName: string;

  /*指标级别 */
  indicatorLevel: string;

  /*指标ID */
  indicatorId: number;

  /*指标名称 */
  indicatorName: string;

  /*点位 */
  point: string;

  /*点位名称 */
  pointName: string;

  /*点位单位 */
  pointUnit: string;

  /*步长 */
  step: number;

  /*Y轴起始值 */
  startValue: number;

  /*Y轴结束值 */
  endValue: number;

  /*目标值 */
  targetValue: number;

  /*UCL值 */
  uclValue: number;

  /*LCL值 */
  lclValue: number;

  /*UWL值 */
  uwlValue: number;

  /*LWL值 */
  lwlValue: number;

  /*USL值 */
  uslValue: number;

  /*LSL值 */
  lslValue: number;

  /*U3L值 */
  u3lValue: number;

  /*L3L值 */
  l3lValue: number;

  /*自控线上限值 */
  uaclValue: number;

  /*自控线下限值 */
  laclValue: number;

  /*最大值 */
  maxValue: number;

  /*最小值 */
  minValue: number;

  /*平均值 */
  avgValue: number;

  /*cp值 */
  cpValue: number;

  /*cpk值 */
  cpkValue: number;

  /*3σ值 */
  sigma3Value: number;

  /*oow数量 */
  oowCount: number;

  /*ooc数量 */
  oocCount: number;

  /*oos数量 */
  oosCount: number;

  /*oo3数量 */
  oo3Count: number;

  /*点位值列表 */
  pointValues: {
    /*时间戳 */
    time: number;

    /*统计值 */
    value: number;

    /*point点位 */
    point: string;

    /* */
    spcAlarmNote: {
      /* */
      analysisId: number;

      /* */
      jobId: string;

      /* */
      spcNoteId: number;

      /* */
      alarmType: string;

      /* */
      oos: boolean;

      /* */
      ooc: boolean;

      /* */
      oow: boolean;

      /* */
      oo3: boolean;

      /* */
      normal: boolean;

      /* */
      pointValue: number;

      /* */
      eventTime: Record<string, unknown>;

      /* */
      spcNoteUpadteTime: Record<string, unknown>;

      /* */
      content: string;

      /* */
      tag: string;
    };

    /*是否需要标记 */
    tag: boolean;
  }[];

  /*点位值列表（日期已格式化） */
  formatPointValues: {
    /*名称 */
    name: string;

    /*数值 */
    num: number;
  }[];
}

/**
 * 查询SPC曲线
 * @param {object} params QuerySpcAnalysisReqDTO
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {array} params.jobIdList 作业编号
 * @param {array} params.pointList 点位
 * @param {string} params.timePeriod 时间周期(minutes/hour/day/week/months)
 * @param {string} params.statFunction 统计函数：AVG/MAX/MIN/COUNT/FIRST/LAST/SUM
 * @param {object} params.startTime 开始日期
 * @param {object} params.endTime 结束日期
 * @param {boolean} params.requireAlarmNote 是否统计曲线上的最新批注
 * @param {number} params.spcAnalysisResultId 需要标记spc报警ID（spcAnalysisResultId)
 * @param {boolean} params.ignoreTimeValidate 忽略查询时间范围限制
 * @param {number} params.radio 放大数据的倍率（例如：100 放大100倍，-100 缩小100倍）默认为0不处理倍率
 * @param {number} params.scale 自定义数值精度（例如：0不处理精度，大于0 处理保留小数位）默认为0不处理精度
 * @returns
 */
export function querySpcAnalysis(data: QuerySpcAnalysisParams): Promise<QuerySpcAnalysisRes[]> {
  return http.post(`/operation/api/v1/spcIndicator/querySpcAnalysis`, { data });
}
// 响应接口
export interface QueryEquipmentStatusClassNumCountRes {
  /*机械科设备状态数 */
  machineStatusNum: {
    /*设备状态 */
    eqpRunStatus: string;

    /*设备状态描述 */
    eqpRunStatusDesc: string;

    /*设备状态数 */
    statusNum: number;
  }[];

  /*水科设备状态数 */
  waterStatusNum: {
    /*设备状态 */
    eqpRunStatus: string;

    /*设备状态描述 */
    eqpRunStatusDesc: string;

    /*设备状态数 */
    statusNum: number;
  }[];

  /*气化科设备状态数 */
  gasStatusNum: {
    /*设备状态 */
    eqpRunStatus: string;

    /*设备状态描述 */
    eqpRunStatusDesc: string;

    /*设备状态数 */
    statusNum: number;
  }[];

  /*电科设备状态数 */
  electrictityStatusNum: {
    /*设备状态 */
    eqpRunStatus: string;

    /*设备状态描述 */
    eqpRunStatusDesc: string;

    /*设备状态数 */
    statusNum: number;
  }[];
}

/**
 * 设备状态四科分组统计
 * @returns
 */
export function queryEquipmentStatusClassNumCount(): Promise<QueryEquipmentStatusClassNumCountRes> {
  return http.post(`/digitaltwins/api/v1/publish/equipment/queryEquipmentStatusClassNumCount`);
}
// 参数接口
export interface GetFactoryEmissionParams {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /*统计维度 M-月度 Y-年度 */
  dimension: string;

  /*开始时间 */
  startDate: string;

  /*结束时间 */
  endDate: string;

  /*层级 */
  level?: string;

  /*核算边界ID */
  templateId?: number;

  /*核算边界名称 */
  templateName?: string;
}

// 响应接口
export interface GetFactoryEmissionRes {
  /*碳排放总量 */
  total: number;

  /*碳排放同比率 */
  totalYoy: number;

  /*分厂统计 */
  factory: {
    /*名称 */
    name: string;

    /*占比 */
    ratio: number;

    /*排放量 */
    value: number;

    /*同比比率 */
    yoy: number;
  }[];

  /* */
  trend: {
    /* */
    xaxis: Record<string, unknown>[];

    /* */
    yaxis: {
      /*标签名称 */
      name: string;

      /*标签单位 */
      unit: string;

      /*值列表 */
      value: Record<string, unknown>[];
    }[];
  };
}

/**
 * 碳排放总览-碳排放分析-碳排放总量
 * @param {object} params QueryEmissionDTO
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {string} params.dimension 统计维度 M-月度 Y-年度
 * @param {object} params.startDate 开始时间
 * @param {object} params.endDate 结束时间
 * @param {string} params.level 层级
 * @param {number} params.templateId 核算边界ID
 * @param {string} params.templateName 核算边界名称
 * @returns
 */
export function getFactoryEmission(data: GetFactoryEmissionParams): Promise<GetFactoryEmissionRes> {
  return http.post(`/energy/accountingEmissionData/getFactoryEmission`, { data });
}
// 参数接口
export interface GetCategoryEmissionYoyParams {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /*统计维度 M-月度 Y-年度 */
  dimension: string;

  /*开始时间 */
  startDate: string;

  /*结束时间 */
  endDate: string;

  /*层级 */
  level?: string;

  /*核算边界ID */
  templateId?: number;

  /*核算边界名称 */
  templateName?: string;
}

// 响应接口
export interface GetCategoryEmissionYoyRes {
  /*名称 */
  name: string;

  /*占比 */
  ratio: number;

  /*排放量 */
  value: number;

  /*同比比率 */
  yoy: number;
}

/**
 * 碳排放总览-碳排放分析-排放类别占比
 * @param {object} params QueryEmissionDTO
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {string} params.dimension 统计维度 M-月度 Y-年度
 * @param {object} params.startDate 开始时间
 * @param {object} params.endDate 结束时间
 * @param {string} params.level 层级
 * @param {number} params.templateId 核算边界ID
 * @param {string} params.templateName 核算边界名称
 * @returns
 */
export function getCategoryEmissionYoy(data: GetCategoryEmissionYoyParams): Promise<GetCategoryEmissionYoyRes[]> {
  return http.post(`/energy/accountingEmissionData/getCategoryEmissionYoy`, { data });
}

export interface QueryScadaIndicatorRes {
  /*内部服务报错信息 */
  innerServiceErrorMsg: string;

  /*查询出的记录数 */
  total: number;

  /*每页记录数 */
  pageSize: number;

  /*当前第几页 */
  currentPageNum: number;

  /*查询结果的总页数 */
  totalPage: number;

  /*查询记录集合List<Map<String,Object>> */
  rows: Record<string, any>[];

  /*查询记录集合JSON */
  jsonRows: string;
}

/**
 * 查询时序库中的Scada指标数据
 * @param {object} params ScadaIndicatorDTO
 * @param {number} params.bucketWidth 时间间隔数字 1,2,3,4....
 * @param {string} params.bucketUnit 时间间隔单位 minutes/hour/day/week/months
 * @param {object} params.startTime 开始时间序列
 * @param {object} params.endTime 结束时间序列
 * @param {array} params.point 点位名称，支持多个点位名称查询
 * @param {array} params.indicators 统计指标常量：AVG/MAX/MIN/COUNT/FIRST/LAST/SUM
 * @param {number} params.pageNum 当前第几页
 * @param {number} params.pageSize 每页显示记录数
 * @param {string} params.contentType 查询结果返回数据格式类型，JSON 或者 LIST,可用值:JSON,LIST
 * @returns
 */
export function queryScadaIndicator(data): Promise<QueryScadaIndicatorRes> {
  return http.post(`/data/api/v1/dataQuery/queryScadaIndicator`, { data });
}
// 参数接口
export interface QueryManoeuvreAndERTParams {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /*统计时间 */
  trendTime?: string;

  /*指定年 */
  screenTime?: string;
}

// 响应接口
export interface QueryManoeuvreAndERTRes {
  /*培训率 */
  cultivate: string;

  /*演习完成率 */
  manoeuvre: string;

  /*统计时间 */
  screenTime: string;
}

/**
 * 年度演习完成率&ERT参演率
 * @param {object} params 大屏演习与培训查询
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {string} params.trendTime 统计时间
 * @param {string} params.screenTime 指定年
 * @returns
 */
export function queryManoeuvreAndERT(data: QueryManoeuvreAndERTParams): Promise<QueryManoeuvreAndERTRes> {
  return http.post(`/erc/api/v1/hseScreen/queryManoeuvreAndERT`, { data });
}
// 响应接口
export interface TaskCountRes {
  /* */
  checkTaskCount: {
    /*未处理 */
    undo: number;

    /*任务总数 */
    total: number;
  };

  /* */
  workOrderCount: {
    /*未处理 */
    undo: number;

    /*任务总数 */
    total: number;
  };
}

/**
 * 任务数量统计
 * @returns
 */
export function taskCount(): Promise<TaskCountRes> {
  return http.post(`/erc/api/v1/checkTask/taskCount`, { data: {} });
}
/**
 * 报警状态数量统计
 * @returns
 */
export function ercAlarmCountStat() {
  return http.post(`/ercAdapter/api/v1/ercAlarmRecord/ercAlarmCountStat`, { data: {} });
}
// 参数接口
export interface QueryQtyLineParams {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /* */
  dimension?: string;

  /* */
  startDate?: string;

  /* */
  endDate?: string;

  /* */
  kind?: string[];
}

// 响应接口
export interface QueryQtyLineRes {
  /*量 */
  qty: number;

  /*费用（元） */
  amt: number;

  /*碳排放（tCO2e） */
  ecarbon: number;

  /*折标煤（tce） */
  scoal: number;

  /* */
  line: {
    /* */
    xaxis: Record<string, unknown>[];

    /* */
    yaxis: {
      /*标签名称 */
      name: string;

      /*标签单位 */
      unit: string;

      /*值列表 */
      value: Record<string, unknown>[];
    }[];
  };
}

/**
 * 获取指定能源耗量-折标煤-费用以及趋势
 * @param {object} params QueryQtyLineDTO
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {string} params.dimension
 * @param {object} params.startDate
 * @param {object} params.endDate
 * @param {array} params.kind
 * @returns
 */
export function queryQtyLine(data: QueryQtyLineParams): Promise<QueryQtyLineRes> {
  return http.post(`/energy/energyOverview/queryQtyLine`, { data });
}
// 响应接口
export interface SpecCurrentRes {
  /*指标id */
  id: number;

  /*spc编码（可使用数组字典的字典项编码，与spcJob做映射使用） */
  spcCode: string;

  /*作业id */
  jobId: string;

  /*科室编码 */
  classCode: string;

  /*科室名称 */
  className: string;

  /*子系统编码 */
  systemCode: string;

  /*子系统名称 */
  systemName: string;

  /*指标级别 */
  indicatorLevel: string;

  /*指标ID */
  indicatorId: number;

  /*指标名称 */
  indicatorName: string;

  /*点位 */
  point: string;

  /*点位名称 */
  pointName: string;

  /*点位单位 */
  pointUnit: string;

  /*步长 */
  step: number;

  /*Y轴起始值 */
  startValue: number;

  /*Y轴结束值 */
  endValue: number;

  /*目标值 */
  targetValue: number;

  /*UCL值 */
  uclValue: number;

  /*LCL值 */
  lclValue: number;

  /*UWL值 */
  uwlValue: number;

  /*LWL值 */
  lwlValue: number;

  /*USL值 */
  uslValue: number;

  /*LSL值 */
  lslValue: number;

  /*U3L值 */
  u3lValue: number;

  /*L3L值 */
  l3lValue: number;

  /*自控线上限值 */
  uaclValue: number;

  /*自控线下限值 */
  laclValue: number;

  /*最大值 */
  maxValue: number;

  /*最小值 */
  minValue: number;

  /*平均值 */
  avgValue: number;

  /*cp值 */
  cpValue: number;

  /*cpk值 */
  cpkValue: number;

  /*3σ值 */
  sigma3Value: number;

  /*oow数量 */
  oowCount: number;

  /*ooc数量 */
  oocCount: number;

  /*oos数量 */
  oosCount: number;

  /*oo3数量 */
  oo3Count: number;

  /*点位值列表 */
  pointValues: {
    /*时间戳 */
    time: number;

    /*统计值 */
    value: number;

    /*point点位 */
    point: string;

    /* */
    spcAlarmNote: {
      /* */
      analysisId: number;

      /* */
      jobId: string;

      /* */
      spcNoteId: number;

      /* */
      alarmType: string;

      /* */
      oos: boolean;

      /* */
      ooc: boolean;

      /* */
      oow: boolean;

      /* */
      oo3: boolean;

      /* */
      normal: boolean;

      /* */
      pointValue: number;

      /* */
      eventTime: Record<string, unknown>;

      /* */
      spcNoteUpadteTime: Record<string, unknown>;

      /* */
      content: string;

      /* */
      tag: string;
    };

    /*是否需要标记 */
    tag: boolean;
  }[];

  /*点位值列表（日期已格式化） */
  formatPointValues: {
    /*名称 */
    name: string;

    /*数值 */
    num: number;
  }[];
}

/**
 * 主进电流弹框
 * @param {string} mainKey
 * @returns
 */
export function specCurrent(mainKey: string): Promise<SpecCurrentRes> {
  return http.get(`/operation/api/v1/ele/spec/current?mainKey=${mainKey}`);
}

// 参数接口
export interface Query_6Params {
  /* */
  factoryId?: string;

  /* */
  facCode?: string;

  /* */
  hseAreaCode?: Record<string, unknown>[];

  /* */
  pageNum?: number;

  /* */
  pageSize?: number;

  /* */
  orderByColumn?: string;

  /* */
  isAsc?: string;

  /*核算模板名称 */
  templateName?: string;

  /*模板启用状态:启用,禁用 */
  templateStatus?: string;

  /* */
  orderBy?: string;
}

// 响应接口
export interface Query_6Res {
  /* */
  pageNum: number;

  /* */
  pageSize: number;

  /* */
  total: number;

  /* */
  pages: number;

  /* */
  data: {
    /*核算模板ID */
    id: number;

    /*核算模板名称 */
    templateName: string;

    /*边界范围(树父节点)ID */
    boundaryId: number;

    /*边界范围名称 */
    boundaryName: string;

    /*模板启用状态:启用,禁用 */
    templateStatus: string;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*创建人 */
    createByName: string;

    /*修改时间 */
    updateTime: Record<string, unknown>;

    /*修改人 */
    updateByName: string;

    /*版本 */
    version: string;

    /*备注 */
    description: string;

    /*是否为草稿;1:是,0:否 */
    isDraft: number;

    /*用来关联同一个模板不同版本 */
    origionId: number;
  }[];
}

/**
 * 查询边界模板
 * @param {object} params QueryAccountingTemplateDTO
 * @param {string} params.factoryId
 * @param {string} params.facCode
 * @param {array} params.hseAreaCode
 * @param {number} params.pageNum
 * @param {number} params.pageSize
 * @param {string} params.orderByColumn
 * @param {string} params.isAsc
 * @param {string} params.templateName 核算模板名称
 * @param {string} params.templateStatus 模板启用状态:启用,禁用
 * @param {string} params.orderBy
 * @returns
 */
export function query_6(data: Query_6Params): Promise<Query_6Res> {
  return http.post(`/energy/accountingTemplate/query`, { data });
}
